/**
 * Created by ASUS on 2021/5/27.
 */
//引入express模块
const express = require('express');
//创建路由器对象
const r = express.Router();
//在user.js中引入连接池模块(../pool.js),打印查看是否得到导出的对象,执行SQ命令
const pool = require('../pool.js');
// console.log(pool);
//添加路由
//1.用户注册 (post /reg)
//http://127.0.0.1:8080/v1/users/reg
r.post('/reg',(req,res,next)=>{
    //1.1获取post请求的数据
    let obj = req.body;
    console.log(obj);

    //1.2验证各项数据是否为空
    if(!obj.uname){
        //json方法将对象转为json对象
        //json和send作用一样的
        res.send({code:401,msg:'uname不能为空'});
    //    阻止往后执行
    //    这是函数内，使用return
        return;
    }
    //练习:完成其他各项的验证
    if(!obj.upwd){
        res.send({code:402,msg:'upwd不能为空'});
        return;
    }
    if (!obj.email){
        res.send({code:401,msg:'email不能为空'});
        return;
    }
    if (!obj.phone){
        res.send({code:401,msg:'phone不能为空'});
        return;
    }
    //验证手机号码格式
    //正则表达式/test(手机号码)
    //如果手机号码格式不正确
    if(!/^1[3-9]\d{9}$/.test(obj.phone)){
    res.send({code:405,msg:'手机号码格式错误'});
    return;
    }
    //1.3执行SQL命令
    pool.query('insert into xz_user set ?',[obj],(err,result)=>{
        if(err){
            // 如果数据库执行出现了错误,交给下一个错误处理的中间件
            next(err);
            //阻止往后执行
            return;
        }
        console.log(result);
    // 表示插入成功
        res.send({code:200,msg:'注册成功'});
    })
});

//2.用户登录 http://127.0.0.1:8080/v1/users/login
r.post('/login',(req,res,next)=>{
 //2.1获取post传递的数据
    let obj= req.body;
    console.log(obj);
//2.2 验证各项数据是否为空
if (!obj.uname){
    res.send({code:401,msg:'uname不为空'});
    return;
}
if (!obj.upwd){
    res.send({code:402,msg:'upwd不为空'});
    return;
}
//2.3执行SQL命令
    pool.query('select * from xz_user where uname = ? and upwd = ?',[obj.uname,obj.upwd],(err,result)=>{
        if(err) {
            //如果有错误交给下一个中间件处理
            next(err);
            return;
        }
        console.log(result);
//查询的结果是数组,如果是空数组说明登录失败,否则登陆成功
        if (result.length === 0){
            res.send({code:201,msg:'登陆失败'});
        }else{
            res.send({code:200,msg:'登陆成功'});
        }
    });
});

//3.修改用户(put  /)
//http://127.0.0.1:8080/v1/users
r.put('/',(req,res,next)=>{
//3.1获取post传递的数据(uid,email,phone,user_name,gender)
    let obj = req.body;
    console.log(obj);
//3.2验证各项数据是否为空
    let i = 400;//记录状态码
    for(let k in obj){
    //k代表属性名     obj[k]    属性值
    //如果属性值为空,提示属性名这项不能为空
    //     console.log(k,obj[k]);
        if(!obj[k]){
            //遍历每一个属性,状态码加1
            i++;
            res.send({code:i,msg:`${k}不能为空`});
            return;
        }
    }

//3.3执行SQL命令,修改用户的数据
pool.query('update xz_user set ? where uid = ?',[obj,obj.uid],(err,result)=>{
    if(err){
        //如果有错误,交给下一个错误处理中间件
        next(err);
        return;
    }
    console.log(result);
    //结果是一个对象,如果对象下的affectedRows的值是0说明修改失败,否则修改成功
    if(result.affectedRows === 0){
        res.send({code:201,msg:'修改失败'});
   }  else{
    res.send({code:200,msg:'修改成功'});
    }
})
})

//4.按照编号查找员工(get  /编号)
r.get('/:uid',(req,res,next)=>{
    //4.1获取路由传参的数据
    let obj = req.params;
    console.log(obj);
    //4.2执行SQL命令
    for(let k in obj){
        if(!obj[k]){
            i++;
            res.send({code:200,msg:`${k}不能为空`});
            return;
        }
    }
pool.query('select * from xz_user where uid = ?',[obj.uid],(err,result)=>{
    if(err){
        //交给下一个中间件处理
        next(err);
        return;
    }
    console.log(result);
if(result.affectedRows === 0){
    res.send({code:201,msg:'该用户不存在'});
    return;
}else{
    res.send({code:200,msg:'查询成功',data:[obj]})
    return;
}
})
})


//5.按照编号删除员工（delete  /编号）
r.delete('/:uid',(req,res,next)=>{
    //5.1获取路由传参的数据
    let obj = req.params;
    console.log(obj);
    //5.2执行SQL命令
    pool.query('delete from xz_user where uid = ?',[obj.uid],(err,result)=>{
        if(err){
            next(err);
            return;
        }
        console.log(result);
        //结果是对象，如果对象下的affectedRows为0说明删除失败，否则删除成功
        if (result.affectedRows === 0){
            res.send({code:201,msg:'删除失败'});
            return;
        }else{
            res.send({code:200,msg:'删除成功'});
            return;
        }
    })
})

//6.用户列表(get   /)
//http://127.0.0.1:8080/v1/users/
r.get('/',(req,res,next)=>{
//6.1获取查询字符串（get）传递的数据
    let obj = req.query;
    console.log(obj);
//6.2验证是否为空，如果为空设置默认值
    if(!obj.pno) obj.pno = 1;
    if(!obj.count) obj.count = 5;
    console.log(obj);
//6.3计算开始查询的值
    let start = (obj.pno - 1) * obj.count;
//6.4把每页的数据量转为数据型
    let size = parseInt(obj.count);
//6.5执行SQL命令（分页查询）
    pool.query('select uid,uname,email,phone from xz_user limit ?,?',[start,size],(err,result)=>{
        if(err){
            next(err);
            return;
        }
        console.log(result);
//查询的结果是数组，把数组响应给浏览器端
        res.send({code:200,msg:'查找成功',data:result});
    })
})
//导出路由器对象
module.exports = r;